package myThread;

public class demo21 {
        public static void main (String[]args) throws InterruptedException {
            Object locker1 = new Object();
            Object locker2 = new Object();
            Thread t1 = new Thread(() -> {
                synchronized (locker1) {
                    System.out.println("开始执行t1线程");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException();
                    }
                    synchronized (locker2) {
                        System.out.println("t1线程结束");
                    }
                }
            });
            Thread t2 = new Thread(() -> {
                synchronized (locker1) {
                    System.out.println("开始执行t2线程");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException();

                    }
                    synchronized (locker2) {
                        System.out.println("t2线程结束");
                    }
                }
            });
            System.out.println("main线程开始");
            t1.start();
            t2.start();
            t1.join();
            t2.join();
            System.out.println("main线程结束");
        }
    }

